package com.yuran.system.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yuran.common.constant.UserConstants;
import com.yuran.common.exception.ServiceException;
import com.yuran.common.utils.StringUtils;
import com.yuran.system.domain.SysLabel;
import com.yuran.system.mapper.SysLabelMapper;
import com.yuran.system.mapper.SysUserLabelMapper;
import com.yuran.system.service.ISysLabelService;

/**
 * 标签信息 服务层处理
 * 
 * @author yuran
 */
@Service
public class SysLabelServiceImpl implements ISysLabelService
{
    @Autowired
    private SysLabelMapper labelMapper;

    @Autowired
    private SysUserLabelMapper userLabelMapper;

    /**
     * 查询标签信息集合
     * 
     * @param label 标签信息
     * @return 标签信息集合
     */
    @Override
    public List<SysLabel> selectLabelList(SysLabel label)
    {
        return labelMapper.selectLabelList(label);
    }

    /**
     * 查询所有标签
     * 
     * @return 标签列表
     */
    @Override
    public List<SysLabel> selectLabelAll()
    {
        return labelMapper.selectLabelAll();
    }

    /**
     * 通过标签ID查询标签信息
     * 
     * @param labelId 标签ID
     * @return 角色对象信息
     */
    @Override
    public SysLabel selectLabelById(Long labelId)
    {
        return labelMapper.selectLabelById(labelId);
    }

    /**
     * 根据用户ID获取标签选择框列表
     * 
     * @param userId 用户ID
     * @return 选中标签ID列表
     */
    @Override
    public List<Long> selectLabelListByUserId(Long userId)
    {
        return labelMapper.selectLabelListByUserId(userId);
    }

    /**
     * 校验标签名称是否唯一
     * 
     * @param label 标签信息
     * @return 结果
     */
    @Override
    public boolean checkLabelNameUnique(SysLabel label)
    {
        Long labelId = StringUtils.isNull(label.getLabelId()) ? -1L : label.getLabelId();
        SysLabel info = labelMapper.checkLabelNameUnique(label.getLabelName());
        if (StringUtils.isNotNull(info) && info.getLabelId().longValue() != labelId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 校验标签编码是否唯一
     * 
     * @param label 标签信息
     * @return 结果
     */
    @Override
    public boolean checkLabelCodeUnique(SysLabel label)
    {
        Long labelId = StringUtils.isNull(label.getLabelId()) ? -1L : label.getLabelId();
        SysLabel info = labelMapper.checkLabelCodeUnique(label.getLabelCode());
        if (StringUtils.isNotNull(info) && info.getLabelId().longValue() != labelId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 通过标签ID查询标签使用数量
     * 
     * @param labelId 标签ID
     * @return 结果
     */
    @Override
    public int countUserLabelById(Long labelId)
    {
        return userLabelMapper.countUserLabelById(labelId);
    }

    /**
     * 删除标签信息
     * 
     * @param labelId 标签ID
     * @return 结果
     */
    @Override
    public int deleteLabelById(Long labelId)
    {
        return labelMapper.deleteLabelById(labelId);
    }

    /**
     * 批量删除标签信息
     * 
     * @param labelIds 需要删除的标签ID
     * @return 结果
     */
    @Override
    public int deleteLabelByIds(Long[] labelIds)
    {
        for (Long labelId : labelIds)
        {
            SysLabel label = selectLabelById(labelId);
            if (countUserLabelById(labelId) > 0)
            {
                throw new ServiceException(String.format("%1$s已分配,不能删除", label.getLabelName()));
            }
        }
        return labelMapper.deleteLabelByIds(labelIds);
    }

    /**
     * 新增保存标签信息
     * 
     * @param label 标签信息
     * @return 结果
     */
    @Override
    public int insertLabel(SysLabel label)
    {
        return labelMapper.insertLabel(label);
    }

    /**
     * 修改保存标签信息
     * 
     * @param label 标签信息
     * @return 结果
     */
    @Override
    public int updateLabel(SysLabel label)
    {
        return labelMapper.updateLabel(label);
    }
}
